[iOS9] 超手抜きATS対応(最後の砦)
1 はじめに
いよいよ、ATSが審査の対象となるようですが、皆様のアプリのATS対応は、進んでいるでしょうか。
今回は、https以外のURL遷移で、Safariに制御を渡してしまう、最も手抜きなATS対応を試してみました。
2 テストプログラム
当初、UIWebViewを指定したURLに遷移させる簡単なサンプルアプリを作成します。
#pragma Action - (IBAction)tapGoButton:(id)sender { // GOボタンをタップすれうと、入力したURLに遷移する NSURL *url = [NSURL URLWithString:self.urlTextField.text]; NSURLRequest *req = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:req]; } #pragma UIWebViewDelegate // 読み込み完了 - (void)webViewDidFinishLoad:(UIWebView *)webView { if (self.webView.loading) { return; } // 遷移後のURLを表示する _urlTextField.text = [webView stringByEvaluatingJavaScriptFromString:@"document.URL"]; } // 読み込み失敗 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { if (self.webView.loading) { return; } // 失敗したことを表示する _urlTextField.text = @"読み込み失敗"; }
3 ATS無効(非推奨)の動作確認
当初、下記の設定をinfo.plistに追加して、ATS無効(非推奨)の状態で動作を確認してみます。
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
httpsのURL( https://www.google.com )は、正常に表示されます。
また、httpのURL( http://www.tenki.jp/ )も表示できています。
4 ATS有効の動作確認
続いて、先にinfo.plistに追加した設定を削除し、ATSが有効な状態にもどします。
そうすると、httpsのURL( https://www.google.com )は、正常に表示されすが、httpのURL( http://www.tenki.jp/ )は、表示できません。
この時、Xcodeでは、次のようなログが出力されています。
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
5 Safari起動
ATSを有効にすると、このようにhttps以外へのアクセスは、物静かに失敗します。
しかし、ユーザにとっては、リンク先がhttpsであるかどうかは、通常意識されていないため、もしかすると非常にUXを害する可能性もあると思います。 そこで、https以外のURL遷移があった場合は、Safariを起動して、とりあえず、そのページを表示するようにしてみました。
// 遷移開始前 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if ([request.URL.description hasPrefix:@"https:"]) { return true; } [[UIApplication sharedApplication] openURL: [request URL]]; return false; }
UIWebViewから出てしまうので、アプリとして完全な制御はできなくなりますが、画面を見ると分かるように、iOS9では、Safariの一番上に、Back to アプリ名のボタンが有りますので、一応アプリに戻るためのUIもあると言えるかも知れません。
6 最後に
単純にSafariを起動しただけです。これでATS対応というのは、おこがましい話ですが、最後の最後にこれを実装しておくことで、最悪、遷移ができなかった時のUXが保たれるかも知れません。